@@ -25,18 +25,17 @@ end |
||
| 25 | 25 |
|
| 26 | 26 |
# Optional libraries. To conserve RAM, comment out any that you don't need, |
| 27 | 27 |
# then run `bundle` and commit the updated Gemfile and Gemfile.lock. |
| 28 |
-gem 'twilio-ruby', '~> 3.11.5' # TwilioAgent |
|
| 29 |
-gem 'ruby-growl', '~> 4.1.0' # GrowlAgent |
|
| 30 |
-gem 'net-ftp-list', '~> 3.2.8' # FtpsiteAgent |
|
| 31 |
-gem 'wunderground', '~> 1.2.0' # WeatherAgent |
|
| 32 |
-gem 'forecast_io', '~> 2.0.0' # WeatherAgent |
|
| 33 |
-gem 'rturk', '~> 2.12.1' # HumanTaskAgent |
|
| 34 |
-gem 'hipchat', '~> 1.2.0' # HipchatAgent |
|
| 35 |
-gem 'xmpp4r', '~> 0.5.6' # JabberAgent |
|
| 36 |
-gem 'mqtt' # MQTTAgent |
|
| 37 |
-gem 'slack-notifier', '~> 1.0.0' # SlackAgent |
|
| 38 |
-gem 'hypdf', '~> 1.0.7' # PDFInfoAgent |
|
| 39 |
-gem 'telegram-bot-ruby', '~> 0.4.1' # TelegramAgent |
|
| 28 |
+gem 'twilio-ruby', '~> 3.11.5' # TwilioAgent |
|
| 29 |
+gem 'ruby-growl', '~> 4.1.0' # GrowlAgent |
|
| 30 |
+gem 'net-ftp-list', '~> 3.2.8' # FtpsiteAgent |
|
| 31 |
+gem 'wunderground', '~> 1.2.0' # WeatherAgent |
|
| 32 |
+gem 'forecast_io', '~> 2.0.0' # WeatherAgent |
|
| 33 |
+gem 'rturk', '~> 2.12.1' # HumanTaskAgent |
|
| 34 |
+gem 'hipchat', '~> 1.2.0' # HipchatAgent |
|
| 35 |
+gem 'xmpp4r', '~> 0.5.6' # JabberAgent |
|
| 36 |
+gem 'mqtt' # MQTTAgent |
|
| 37 |
+gem 'slack-notifier', '~> 1.0.0' # SlackAgent |
|
| 38 |
+gem 'hypdf', '~> 1.0.10' # PDFInfoAgent |
|
| 40 | 39 |
|
| 41 | 40 |
# Weibo Agents |
| 42 | 41 |
gem 'weibo_2', github: 'cantino/weibo_2', branch: 'master' |
@@ -101,6 +100,7 @@ gem 'foreman', '~> 0.63.0' |
||
| 101 | 100 |
gem 'geokit', '~> 1.8.4' |
| 102 | 101 |
gem 'geokit-rails', '~> 2.0.1' |
| 103 | 102 |
gem 'httparty', '~> 0.13' |
| 103 |
+gem 'httmultiparty', '~> 0.3.16' |
|
| 104 | 104 |
gem 'jquery-rails', '~> 3.1.3' |
| 105 | 105 |
gem 'json', '~> 1.8.1' |
| 106 | 106 |
gem 'jsonpath', '~> 0.5.6' |
@@ -112,10 +112,6 @@ GEM |
||
| 112 | 112 |
multi_json (>= 1.0.0) |
| 113 | 113 |
aws-sdk-core (2.2.15) |
| 114 | 114 |
jmespath (~> 1.0) |
| 115 |
- axiom-types (0.1.1) |
|
| 116 |
- descendants_tracker (~> 0.0.4) |
|
| 117 |
- ice_nine (~> 0.11.0) |
|
| 118 |
- thread_safe (~> 0.3, >= 0.3.1) |
|
| 119 | 115 |
bcrypt (3.1.10) |
| 120 | 116 |
better_errors (1.1.0) |
| 121 | 117 |
coderay (>= 1.0.0) |
@@ -150,8 +146,6 @@ GEM |
||
| 150 | 146 |
chronic (0.10.2) |
| 151 | 147 |
cliver (0.3.2) |
| 152 | 148 |
coderay (1.1.0) |
| 153 |
- coercible (1.0.0) |
|
| 154 |
- descendants_tracker (~> 0.0.1) |
|
| 155 | 149 |
coffee-rails (4.1.1) |
| 156 | 150 |
coffee-script (>= 2.2.0) |
| 157 | 151 |
railties (>= 4.0.0, < 5.1.x) |
@@ -176,8 +170,6 @@ GEM |
||
| 176 | 170 |
activesupport (>= 3.0, < 5.0) |
| 177 | 171 |
delorean (2.1.0) |
| 178 | 172 |
chronic |
| 179 |
- descendants_tracker (0.0.4) |
|
| 180 |
- thread_safe (~> 0.3, >= 0.3.1) |
|
| 181 | 173 |
devise (3.5.4) |
| 182 | 174 |
bcrypt (~> 3.0) |
| 183 | 175 |
orm_adapter (~> 0.1) |
@@ -233,8 +225,6 @@ GEM |
||
| 233 | 225 |
dotenv (>= 0.7) |
| 234 | 226 |
thor (>= 0.13.6) |
| 235 | 227 |
formatador (0.2.5) |
| 236 |
- gene_pool (1.4.1) |
|
| 237 |
- thread_safe |
|
| 238 | 228 |
geokit (1.8.5) |
| 239 | 229 |
multi_json (>= 1.3.2) |
| 240 | 230 |
geokit-rails (2.0.1) |
@@ -277,21 +267,22 @@ GEM |
||
| 277 | 267 |
hipchat (1.2.0) |
| 278 | 268 |
httparty |
| 279 | 269 |
hpricot (0.8.6) |
| 280 |
- httmultiparty (0.3.10) |
|
| 270 |
+ httmultiparty (0.3.16) |
|
| 281 | 271 |
httparty (>= 0.7.3) |
| 272 |
+ mimemagic |
|
| 282 | 273 |
multipart-post |
| 283 | 274 |
http (0.6.4) |
| 284 | 275 |
http_parser.rb (~> 0.6.0) |
| 285 | 276 |
http-cookie (1.0.2) |
| 286 | 277 |
domain_name (~> 0.5) |
| 287 | 278 |
http_parser.rb (0.6.0) |
| 288 |
- httparty (0.13.1) |
|
| 279 |
+ httparty (0.13.7) |
|
| 289 | 280 |
json (~> 1.8) |
| 290 | 281 |
multi_xml (>= 0.5.2) |
| 291 |
- hypdf (1.0.7) |
|
| 292 |
- httmultiparty (= 0.3.10) |
|
| 282 |
+ hypdf (1.0.10) |
|
| 283 |
+ httmultiparty (~> 0.3) |
|
| 284 |
+ httparty (~> 0.13) |
|
| 293 | 285 |
i18n (0.7.0) |
| 294 |
- ice_nine (0.11.2) |
|
| 295 | 286 |
jmespath (1.1.3) |
| 296 | 287 |
jquery-rails (3.1.3) |
| 297 | 288 |
railties (>= 3.0, < 5.0) |
@@ -329,6 +320,7 @@ GEM |
||
| 329 | 320 |
thread_safe (~> 0.3, >= 0.3.1) |
| 330 | 321 |
method_source (0.8.2) |
| 331 | 322 |
mime-types (2.99.1) |
| 323 |
+ mimemagic (0.3.1) |
|
| 332 | 324 |
mini_magick (4.2.3) |
| 333 | 325 |
mini_portile2 (2.0.0) |
| 334 | 326 |
minitest (5.8.4) |
@@ -382,11 +374,6 @@ GEM |
||
| 382 | 374 |
multi_json (~> 1.3) |
| 383 | 375 |
omniauth-oauth (~> 1.0) |
| 384 | 376 |
orm_adapter (0.5.0) |
| 385 |
- persistent_http (1.0.6) |
|
| 386 |
- gene_pool (>= 1.3) |
|
| 387 |
- persistent_httparty (0.1.2) |
|
| 388 |
- httparty (~> 0.9) |
|
| 389 |
- persistent_http (< 2) |
|
| 390 | 377 |
pg (0.18.3) |
| 391 | 378 |
poltergeist (1.8.1) |
| 392 | 379 |
capybara (~> 2.1) |
@@ -531,10 +518,6 @@ GEM |
||
| 531 | 518 |
net-ssh (>= 2.8.0) |
| 532 | 519 |
string-scrub (0.0.5) |
| 533 | 520 |
systemu (2.6.4) |
| 534 |
- telegram-bot-ruby (0.4.1) |
|
| 535 |
- httmultiparty |
|
| 536 |
- persistent_httparty |
|
| 537 |
- virtus |
|
| 538 | 521 |
term-ansicolor (1.3.0) |
| 539 | 522 |
tins (~> 1.0) |
| 540 | 523 |
therubyracer (0.12.2) |
@@ -579,11 +562,6 @@ GEM |
||
| 579 | 562 |
macaddr (~> 1.0) |
| 580 | 563 |
uuidtools (2.1.5) |
| 581 | 564 |
vcr (2.9.2) |
| 582 |
- virtus (1.0.5) |
|
| 583 |
- axiom-types (~> 0.1) |
|
| 584 |
- coercible (~> 1.0) |
|
| 585 |
- descendants_tracker (~> 0.0, >= 0.0.3) |
|
| 586 |
- equalizer (~> 0.0, >= 0.0.9) |
|
| 587 | 565 |
warden (1.2.4) |
| 588 | 566 |
rack (>= 1.0) |
| 589 | 567 |
webmock (1.17.4) |
@@ -641,8 +619,9 @@ DEPENDENCIES |
||
| 641 | 619 |
guard-rspec (~> 4.6.4) |
| 642 | 620 |
haversine |
| 643 | 621 |
hipchat (~> 1.2.0) |
| 622 |
+ httmultiparty (~> 0.3.16) |
|
| 644 | 623 |
httparty (~> 0.13) |
| 645 |
- hypdf (~> 1.0.7) |
|
| 624 |
+ hypdf (~> 1.0.10) |
|
| 646 | 625 |
jquery-rails (~> 3.1.3) |
| 647 | 626 |
json (~> 1.8.1) |
| 648 | 627 |
jsonpath (~> 0.5.6) |
@@ -689,7 +668,6 @@ DEPENDENCIES |
||
| 689 | 668 |
spring (~> 1.6.3) |
| 690 | 669 |
spring-commands-rspec (~> 1.0.4) |
| 691 | 670 |
string-scrub |
| 692 |
- telegram-bot-ruby (~> 0.4.1) |
|
| 693 | 671 |
therubyracer (~> 0.12.2) |
| 694 | 672 |
tumblr_client! |
| 695 | 673 |
twilio-ruby (~> 3.11.5) |
@@ -1,18 +1,17 @@ |
||
| 1 |
-require 'telegram/bot' |
|
| 1 |
+require 'httmultiparty' |
|
| 2 | 2 |
require 'open-uri' |
| 3 | 3 |
require 'tempfile' |
| 4 | 4 |
|
| 5 | 5 |
module Agents |
| 6 | 6 |
class TelegramAgent < Agent |
| 7 |
+ include HTTMultiParty |
|
| 8 |
+ base_uri 'https://api.telegram.org/' |
|
| 9 |
+ |
|
| 7 | 10 |
cannot_be_scheduled! |
| 8 | 11 |
cannot_create_events! |
| 9 | 12 |
no_bulk_receive! |
| 10 | 13 |
|
| 11 |
- gem_dependency_check { defined?(Telegram) }
|
|
| 12 |
- |
|
| 13 | 14 |
description <<-MD |
| 14 |
- #{'# Include `telegram-bot-ruby` in your Gemfile to use this Agent!' if dependencies_missing?}
|
|
| 15 |
- |
|
| 16 | 15 |
The Telegram Agent receives and collects events and sends them via [Telegram](https://telegram.org/). |
| 17 | 16 |
|
| 18 | 17 |
It is assumed that events have either a `text`, `photo`, `audio`, `document` or `video` key. You can use the EventFormattingAgent if your event does not provide these keys. |
@@ -51,16 +50,20 @@ module Agents |
||
| 51 | 50 |
|
| 52 | 51 |
private |
| 53 | 52 |
|
| 54 |
- TELEGRAM_FIELDS = {
|
|
| 55 |
- text: :send_message, |
|
| 56 |
- photo: :send_photo, |
|
| 57 |
- audio: :send_audio, |
|
| 58 |
- document: :send_document, |
|
| 59 |
- video: :send_video |
|
| 53 |
+ TELEGRAM_ACTIONS = {
|
|
| 54 |
+ text: :sendMessage, |
|
| 55 |
+ photo: :sendPhoto, |
|
| 56 |
+ audio: :sendAudio, |
|
| 57 |
+ document: :sendDocument, |
|
| 58 |
+ video: :sendVideo |
|
| 60 | 59 |
}.freeze |
| 61 | 60 |
|
| 61 |
+ def telegram_bot_uri(method) |
|
| 62 |
+ "/bot#{interpolated['auth_token']}/#{method}"
|
|
| 63 |
+ end |
|
| 64 |
+ |
|
| 62 | 65 |
def receive_event(event) |
| 63 |
- TELEGRAM_FIELDS.each do |field, method| |
|
| 66 |
+ TELEGRAM_ACTIONS.each do |field, method| |
|
| 64 | 67 |
payload = load_field event, field |
| 65 | 68 |
next unless payload |
| 66 | 69 |
send_telegram_message method, field => payload |
@@ -69,9 +72,7 @@ module Agents |
||
| 69 | 72 |
|
| 70 | 73 |
def send_telegram_message(method, params) |
| 71 | 74 |
params[:chat_id] = interpolated['chat_id'] |
| 72 |
- Telegram::Bot::Client.run interpolated['auth_token'] do |bot| |
|
| 73 |
- bot.api.send method, params |
|
| 74 |
- end |
|
| 75 |
+ TelegramAgent.post telegram_bot_uri(method), query: params |
|
| 75 | 76 |
end |
| 76 | 77 |
|
| 77 | 78 |
def load_field(event, field) |
@@ -55,8 +55,8 @@ describe Agents::TelegramAgent do |
||
| 55 | 55 |
@checker.receive [event_0, event_1] |
| 56 | 56 |
|
| 57 | 57 |
expect(@sent_messages).to eq([ |
| 58 |
- { send_message: { text: 'Looks like its going to rain' } },
|
|
| 59 |
- { send_message: { text: 'Another text message' } }
|
|
| 58 |
+ { sendMessage: { text: 'Looks like its going to rain' } },
|
|
| 59 |
+ { sendMessage: { text: 'Another text message' } }
|
|
| 60 | 60 |
]) |
| 61 | 61 |
end |
| 62 | 62 |
|
@@ -64,28 +64,28 @@ describe Agents::TelegramAgent do |
||
| 64 | 64 |
event = event_with_payload photo: 'https://example.com/image.png' |
| 65 | 65 |
@checker.receive [event] |
| 66 | 66 |
|
| 67 |
- expect(@sent_messages).to eq([{ send_photo: { photo: :stubbed_file } }])
|
|
| 67 |
+ expect(@sent_messages).to eq([{ sendPhoto: { photo: :stubbed_file } }])
|
|
| 68 | 68 |
end |
| 69 | 69 |
|
| 70 | 70 |
it 'accepts audio key and uses :send_audio to send the file' do |
| 71 | 71 |
event = event_with_payload audio: 'https://example.com/sound.mp3' |
| 72 | 72 |
@checker.receive [event] |
| 73 | 73 |
|
| 74 |
- expect(@sent_messages).to eq([{ send_audio: { audio: :stubbed_file } }])
|
|
| 74 |
+ expect(@sent_messages).to eq([{ sendAudio: { audio: :stubbed_file } }])
|
|
| 75 | 75 |
end |
| 76 | 76 |
|
| 77 | 77 |
it 'accepts document key and uses :send_document to send the file' do |
| 78 | 78 |
event = event_with_payload document: 'https://example.com/document.pdf' |
| 79 | 79 |
@checker.receive [event] |
| 80 | 80 |
|
| 81 |
- expect(@sent_messages).to eq([{ send_document: { document: :stubbed_file } }])
|
|
| 81 |
+ expect(@sent_messages).to eq([{ sendDocument: { document: :stubbed_file } }])
|
|
| 82 | 82 |
end |
| 83 | 83 |
|
| 84 | 84 |
it 'accepts video key and uses :send_video to send the file' do |
| 85 | 85 |
event = event_with_payload video: 'https://example.com/video.avi' |
| 86 | 86 |
@checker.receive [event] |
| 87 | 87 |
|
| 88 |
- expect(@sent_messages).to eq([{ send_video: { video: :stubbed_file } }])
|
|
| 88 |
+ expect(@sent_messages).to eq([{ sendVideo: { video: :stubbed_file } }])
|
|
| 89 | 89 |
end |
| 90 | 90 |
end |
| 91 | 91 |
|